package com.panopset.gui.container;

import javax.swing.JComponent;

import com.panopset.centralen.UniqueKey;
import com.panopset.swing.Field;
import com.panopset.swing.FieldDefaultHardCoded;
import com.panopset.swing.FieldValue;
import com.panopset.swing.Scaffolding;

public abstract class PanNoBorderField<T extends JComponent> extends Field {

	@Override
	protected abstract boolean isValid(final String valueToCheck);

	/**
	 * Tool tip text.
	 */
	protected final String ptoolTipText;

	/**
	 * @param defaultValue
	 *            Default value.
	 *            
	 */
	public PanNoBorderField(final String defaultValue, final String toolTipText) {
		setFieldDefault(new FieldDefaultHardCoded(defaultValue));
		ptoolTipText = toolTipText;
		final String key = UniqueKey.generateStackHashKey();
		setFieldValue(new FieldValue() {
			/**
			 * @return Value.
			 */
			public String getValue() {
				String s = Scaffolding.s.get(key);
				if (s == null) {
					return null;
				} else {
					return s;
				}
			}

			/**
			 * @param value
			 *            Value.
			 * @return Same value.
			 */
			public void setValue(final String value) {
				Scaffolding.s.put(key, value);
			}
		});
	}

	/**
	 * @return Inner component.
	 */
	protected abstract T createComponent();

	/**
	 * Inner component gui.
	 */
	private T gui;

	/**
	 * @return inner component.
	 */
	public final T getInnerComponent() {
		if (gui == null) {
			gui = createComponent();
			gui.setToolTipText(ptoolTipText);
		}
		return gui;
	}
}
